package com.algorithm.array;


/**
 * 数组 双指针探寻
 */
public class ArrayDoublePointer {

    public static void main(String[] args) {
        System.out.print(maxArea());
    }


    public static int maxArea(){
        int[] height={1,8,6,2,5,4,8,3,7};
        // maxArea(height); 暴力破解
        return maxAreaDoublePointer(height);
    }
    public static int maxAreaDoublePointer(int[] height) {
        /**
         * 双指针夹逼
         * 从两侧往中间寻找 只需要循环一次即可
         */
        int max=0;
        int size=0;
        //定义两个指针
        int i=0; //头指针
        int j=height.length-1; //尾部指针
        while(i<j){
           size=Math.min(height[i],height[j])*(j-i);
           max=max<size?size:max;
           if(height[i]<height[j]){
               i++;
           }else{
               j--;
           }
        }
        return max;
    }

    //爆力 破解
    public static int maxArea(int[] height) {
        /**
         思路：
         1.暴力破解法
         循环全部情况 时间复杂度 O(n^2)
         for
         for
         */
        if(height==null || height.length<2){
            return 0;
        }
        int max=0;
        int size=0;
        for(int i=0;i<height.length;i++){
            for(int j=i+1;j<height.length;j++){
                //面积 如果比max大 赋值给max
                size=Math.min(height[i],height[j])*(j-i);
                max=max<size?size:max;
            }
        }
        return max;
    }

}
